/*
 * ListaPrincipal.cpp
 *
 *  Created on: 31/05/2011
 *      Author: alejandro
 */

#include "ListaPrincipal.h"
#include <string>
#include <iostream>

using namespace std;

ListaPrincipal::ListaPrincipal() {
	this->lista = new Lista<PalabraConFrecuencias*>();

}

ListaPrincipal::~ListaPrincipal() {
	delete lista;
}

Lista<PalabraConFrecuencias*>* ListaPrincipal::getLista(){
	return this->lista;
}

void ListaPrincipal::agregarPalabra(PalabraConFrecuencias* palabra) {

	IteradorLista<PalabraConFrecuencias*> iterador = this->lista->iterador();
	//IteradorLista<PalabraConFrecuencias*> iteradorAux = this->lista->iterador();

	bool encontrado = false;

	while(iterador.tieneSiguiente()){
		PalabraConFrecuencias* pal = iterador.siguiente();

		if(pal->getPalabra() == palabra->getPalabra()){
			pal->aumentarFrecuenciaMarx(palabra->getFrecuenciaMarx());
			pal->aumentarFrecuenciaWeber(palabra->getFrecuenciaWeber());
			encontrado  = true;
			break;
		}

	}

	if (!encontrado) {
		this->lista->agregar(palabra);
	}

}

string ListaPrincipal::toString() {

	string s = "";

	IteradorLista<PalabraConFrecuencias*> iterador = this->lista->iterador();

	while(iterador.tieneSiguiente()){
		PalabraConFrecuencias* actual = iterador.siguiente();
		stringstream ss,tt;

		ss << actual->getFrecuenciaMarx();
		tt << actual->getFrecuenciaWeber();

		s += "[" + actual->getPalabra() + "," + ss.str() + "," + tt.str() + "]";
	}

	return s;
}

void ListaPrincipal::toStringMatriz() {

	IteradorLista<PalabraConFrecuencias*> iterador = this->lista->iterador();

	while(iterador.tieneSiguiente()){

		string s = "";

		PalabraConFrecuencias* actual = iterador.siguiente();
		stringstream ss,tt;

		ss << actual->getFrecuenciaMarx();
		tt << actual->getFrecuenciaWeber();

		IteradorLista<FrecuenciaParrafo*> iteradorFrecuencias = actual->getListaFrecuencias()->iterador();

		s += "[" + actual->getPalabra() + "," + ss.str() + "," + tt.str() + "]";

		int parrafo = 1;

		while(iteradorFrecuencias.tieneSiguiente()){
			FrecuenciaParrafo* frecActual = iteradorFrecuencias.siguiente();
			stringstream cont,parr;
			parr << parrafo;
			cont << frecActual->getContador();
			s += "[" + parr.str() + "," + frecActual->getAutor() + "," + cont.str() + "]";
			parrafo++;
		}

		cout << s << endl;
	}

	//return s;
}
